package net.jgrm.redisadvanced.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * Redis高级功能配置属性类
 */
@Data
@Component
@ConfigurationProperties(prefix = "redis.advanced")
public class RedisAdvancedProperties {

    /**
     * 是否启用Redis高级功能
     */
    private boolean enabled = true;

    /**
     * 缓存键前缀
     */
    private String keyPrefix = "redis:advanced:";

    /**
     * 默认缓存过期时间（秒）
     */
    private long defaultExpireTime = 3600;

    /**
     * 布隆过滤器配置
     */
    private BloomFilterConfig bloomFilter = new BloomFilterConfig();

    /**
     * 分布式锁配置
     */
    private DistributedLockConfig distributedLock = new DistributedLockConfig();

    /**
     * 布隆过滤器配置内部类
     */
    @Data
    public static class BloomFilterConfig {
        /**
         * 是否启用布隆过滤器
         */
        private boolean enabled = true;

        /**
         * 预计元素数量
         */
        private long expectedElements = 100000;

        /**
         * 误判率
         */
        private double falseProbability = 0.01;
    }

    /**
     * 分布式锁配置内部类
     */
    @Data
    public static class DistributedLockConfig {
        /**
         * 是否启用分布式锁
         */
        private boolean enabled = true;

        /**
         * 默认锁超时时间（毫秒）
         */
        private long defaultLockTimeout = 30000;

        /**
         * 默认等待时间（毫秒）
         */
        private long defaultWaitTime = 5000;
    }
}